#ifndef threadpool_h__
#define threadpool_h__

#include <unistd.h>
#include <iostream>

// 任务类
struct threadpool_task_t
{
    void (*callback)(int, void *); // 回调函数
    int arg1;                      // 函数参数1
    void *arg2;                    // 函数参数2
};

// 池结构体
struct threadpool_t;

/// @brief 创建线程池
/// @param qsize 任务队列容量
/// @param minthnum 最小线程数量
/// @param maxthnum 最大线程数量
/// @return
threadpool_t *threadpool_create(size_t qsize, size_t minthnum, size_t maxthnum);

/// @brief 销毁线程池
void threadpool_destroy(threadpool_t *pool);

/// @brief 工作线程
/// @param arg
/// @return
void *worker_thread(void *arg);

/// @brief 管理者线程
/// @param arg
/// @return
void *adjust_thread(void *arg);

/// @brief 添加任务
/// @param callback
/// @param arg
/// @param pool
void threadpool_addtask(void (*callback)(int, void *), int arg1, void *arg2, threadpool_t *pool);

#endif